package com.example.BlockChain.entity.block;

import com.example.BlockChain.entity.TradeObject;

import java.util.Map;

/**
 * BlockFile 类
 * 描述与区块相关的文件信息，包含交易对象、区块索引、区块哈希等属性。
 * 主要用于存储商品溯源系统中每个区块的文件化内容。
 */
public class BlockFile {

    /**
     * tbMap：交易对象映射表
     * - 键：交易 ID（唯一标识每笔交易）
     * - 值：TradeObject 对象（描述交易的详细信息）
     */
    private Map<String, TradeObject> tbMap;

    /**
     * blockIndex：区块索引
     * 表示区块在区块链中的位置，通常从 0 开始。
     */
    private String blockIndex;

    /**
     * blockHash：区块哈希值
     * 由当前区块的数据通过哈希算法计算得到，用于唯一标识当前区块。
     */
    private String blockHash;

    /**
     * preBlockHash：前一区块的哈希值
     * 用于链接区块链中的前一区块，形成区块链数据的完整性和顺序性。
     */
    private String preBlockHash;

    /**
     * 获取交易对象映射表
     * @return tbMap 交易对象映射表
     */
    public Map<String, TradeObject> getTbMap() {
        return tbMap;
    }

    /**
     * 设置交易对象映射表
     * @param tbMap 交易对象映射表
     */
    public void setTbMap(Map<String, TradeObject> tbMap) {
        this.tbMap = tbMap;
    }

    /**
     * 获取区块索引
     * @return blockIndex 区块索引
     */
    public String getBlockIndex() {
        return blockIndex;
    }

    /**
     * 设置区块索引
     * @param blockIndex 区块索引
     */
    public void setBlockIndex(String blockIndex) {
        this.blockIndex = blockIndex;
    }

    /**
     * 获取区块哈希值
     * @return blockHash 区块哈希值
     */
    public String getBlockHash() {
        return blockHash;
    }

    /**
     * 设置区块哈希值
     * @param blockHash 区块哈希值
     */
    public void setBlockHash(String blockHash) {
        this.blockHash = blockHash;
    }

    /**
     * 获取前一区块的哈希值
     * @return preBlockHash 前一区块的哈希值
     */
    public String getPreBlockHash() {
        return preBlockHash;
    }

    /**
     * 设置前一区块的哈希值
     * @param preBlockHash 前一区块的哈希值
     */
    public void setPreBlockHash(String preBlockHash) {
        this.preBlockHash = preBlockHash;
    }

    /**
     * 返回 BlockFile 对象的字符串表示
     * 用于打印对象的详细信息，方便调试。
     */
    @Override
    public String toString() {
        return "BlockFile{" +
                "tbMap=" + tbMap + // 打印交易对象映射表
                ", blockIndex='" + blockIndex + '\'' + // 打印区块索引
                ", blockHash='" + blockHash + '\'' + // 打印区块哈希值
                ", preBlockHash='" + preBlockHash + '\'' + // 打印前一区块哈希值
                '}';
    }
}
